/*
 * @(#)JsonStatementPool.java    0.6 09/01/2009
 */
package org.miao.catstorage;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;
import org.miao.catstorage.exception.StorageException;

/**
 * Json存储池
 * <p>预定义语句存储池接口的Json实现，使用Json格式在文件中保存预定义语句</p>
 * @author Miao
 * @version 0.6
 * @since 0.2
 */
public class JsonStatementPool implements StatementPool {

    /**
     * 读取json文件的工具类
     */
    private Gson gson = new Gson();
    /**
     * 读取字符流对象
     */
    private Reader reader;
    /**
     * 语句存储池
     */
    private Map<String, String> pool;
    /**
     * 日志
     */
    private static Log log = LogFactory.getLog(JsonStatementPool.class);

    /**
     * 构造方法
     * @param resourceFile 保存预定义语句的资源文件
     * @throws StorageException 资源文件未找到或者资源文件处理异常
     * @since 0.2
     */
    public JsonStatementPool(File resourceFile) {
        try {
            reader = new FileReader(resourceFile);
            Type type = new TypeToken<HashMap<String, String>>() {
            }.getType();
            pool = gson.fromJson(reader, type);
            reader.close();
        } catch (FileNotFoundException ex) {
            log.error("没有找到定义的资源文件", ex);
            throw new StorageException(ex);
        } catch (IOException ex) {
            log.error("资源文件流不能被关闭", ex);
            throw new StorageException(ex);
        }
    }

    public String get(String key) {
        return pool.get(key);
    }
}
